home *** CD-ROM | disk | FTP | other *** search
- /*
- MenuDispatch.c
-
- Handle menu commands.
-
- © 1995 Apple Computer, Inc.
- */
- #include <QuickDraw.h>
- #include <Windows.h>
- #include <Menus.h>
- #include <Files.h>
- #include <StandardFile.h>
- #include <Menus.h>
- #include <Devices.h>
- #include <Events.h>
-
- #include "EventLoop.h"
- #include "MenuDispatch.h"
- #include "QD3DViewer.h"
-
- void BuildMenuBars(void);
- void ChooseApple(short itemNumber);
- void ChooseFile(short item);
- void ChooseEdit(short item);
- void MenuDispatch(short menuNumber,short itemNumber);
- void RunDeskAccesory(short item);
- void AdjustMenuItems(void);
-
- extern void ChooseView(short item);
- extern void ChooseTest(short item);
-
- extern WindowPtr MainView;
- int gWindowCount;
-
- void BuildMenuBars(void)
- {
- SetMenuBar(GetNewMBar(128));
- AppendResMenu(GetMenuHandle(APPLE_MENU),'DRVR');
- DrawMenuBar();
- gWindowCount = 0;
- }
-
- void RunDeskAccesory(short item)
- {
- GrafPtr savePort;
- short daRefNum;
- Str255 daName;
-
- GetPort(&savePort);
- GetMenuItemText(GetMenuHandle(APPLE_MENU), item, daName);
- daRefNum = OpenDeskAcc(daName);
- SetPort(savePort);
- }
-
- void ChooseApple(short itemNumber)
- {
- short item;
-
- if(itemNumber == cmdAbout) {
- item = Alert(ABOUT_BOX_ID,nil);
- } else {
- RunDeskAccesory(itemNumber);
- }
- }
-
- void ChooseFile(short item)
- {
- switch(item)
- {
- case cmdNew:
- {
- Rect defaultBounds = {50, 50, 300, 300};
- TQ3ViewerObject aViewer;
- TVCDemoDataHdl demoData;
-
- MainView = GetNewCWindow(128, nil, (WindowPtr)-1L);
- MoveWindow(MainView, 10 + (gWindowCount * 18), 40 + (gWindowCount * 18), true);
- gWindowCount++;
- ShowWindow(MainView);
- aViewer = Q3ViewerNew((CGrafPtr)MainView, &MainView->portRect, kQ3ViewerDefault);
- demoData = (TVCDemoDataHdl)NewHandle(sizeof(TVCDemoData));
- (*demoData)->containerStyle = kContainerFull;
- (*demoData)->viewer1 = aViewer;
- SetWRefCon(MainView, (long)demoData);
- break;
- }
-
- case cmdOpen:
- {
- short refNum;
- OSErr anErr = noErr;
- short numTypes;
- OSType typeList[2];
- StandardFileReply sfReply;
- TVCDemoDataHdl demoData;
-
- numTypes = 2;
- typeList[0] = '3DMF';
- typeList[1] = 'TEXT';
- StandardGetFile(nil, numTypes, typeList, &sfReply);
- if (sfReply.sfGood)
- {
- anErr = FSpOpenDF(&sfReply.sfFile, fsCurPerm, &refNum);
- if (anErr == noErr)
- {
- TQ3ViewerObject aViewer;
-
- ChooseFile(cmdNew);
- demoData = (TVCDemoDataHdl)GetWRefCon(MainView);
- aViewer = (*demoData)->viewer1;
- Q3ViewerUseFile(aViewer, refNum);
- anErr = FSClose(refNum);
- }
- }
- break;
- }
-
- case cmdClose:
- {
- if (MainView == FrontWindow())
- {
- TQ3ViewerObject aViewer;
- TVCDemoDataHdl demoData;
-
- demoData = (TVCDemoDataHdl)GetWRefCon(MainView);
- aViewer = (*demoData)->viewer1;
- Q3ViewerDispose(aViewer);
- if ((*demoData)->containerStyle == kContainerFourView)
- {
- Q3ViewerDispose((*demoData)->viewer2);
- Q3ViewerDispose((*demoData)->viewer3);
- Q3ViewerDispose((*demoData)->viewer4);
- }
- DisposeHandle((Handle)demoData);
-
- DisposeWindow(MainView);
- MainView = FrontWindow();
- }
- break;
- }
-
- case cmdSave:
- case cmdSaveAs:
- {
- short refNum;
- OSErr anErr = noErr;
- StandardFileReply sfReply;
-
- if (!MainView)
- break;
- StandardPutFile("\pSave model as:", "\pUntitled", &sfReply);
- if (sfReply.sfGood)
- {
- anErr = FSpOpenDF(&sfReply.sfFile, fsCurPerm, &refNum);
- if (anErr != noErr)
- {
- anErr = FSpCreate(&sfReply.sfFile, 'QD3A', '3DMF', sfReply.sfScript);
- if (anErr == noErr)
- anErr = FSpOpenDF(&sfReply.sfFile, fsCurPerm, &refNum);
- }
- if (anErr == noErr)
- {
- TVCDemoDataHdl demoData;
- TQ3ViewerObject aViewer;
-
- demoData = (TVCDemoDataHdl)GetWRefCon(MainView);
- aViewer = (*demoData)->viewer1;
-
- Q3ViewerWriteFile(aViewer, refNum);
- anErr = FSClose(refNum);
- }
- }
- break;
- }
-
- case cmdQuit:
- ChooseFile(cmdClose);
- Done = true;
- break;
-
- default:
- break;
- }
- }
-
-
- void ChooseEdit(short item)
- {
- if (MainView == FrontWindow())
- {
- TQ3ViewerObject aViewer;
- TVCDemoDataHdl demoData;
-
- demoData = (TVCDemoDataHdl)GetWRefCon(MainView);
- aViewer = (*demoData)->viewer1;
-
- switch(item)
- {
- case cmdCut:
- Q3ViewerCut(aViewer);
- break;
- case cmdCopy:
- Q3ViewerCopy(aViewer);
- break;
- case cmdPaste:
- Q3ViewerPaste(aViewer);
- break;
- case cmdClear:
- Q3ViewerClear(aViewer);
- break;
- default:
- break;
- }
- }
- }
-
- void MenuDispatch(short menuNumber,short itemNumber)
- {
-
- if(menuNumber != 0)
- switch(menuNumber) {
- case APPLE_MENU : ChooseApple(itemNumber);
- break;
- case FILE_MENU : ChooseFile(itemNumber);
- break;
- case EDIT_MENU : ChooseEdit(itemNumber);
- break;
- case VIEW_MENU : ChooseView(itemNumber);
- break;
- case TEST_MENU : ChooseTest(itemNumber);
- break;
- default : break;
- }
- }
-
- void AdjustMenuItems(void)
- {
- MenuHandle menu;
- unsigned long viewerFlags;
- Boolean checked;
-
- menu = GetMenuHandle(VIEW_MENU);
- if (MainView && MainView == FrontWindow())
- {
- TVCDemoDataHdl demoData;
- TQ3ViewerObject aViewer;
-
- demoData = (TVCDemoDataHdl)GetWRefCon(MainView);
- aViewer = (*demoData)->viewer1;
-
- viewerFlags = Q3ViewerGetFlags(aViewer);
-
- checked = (viewerFlags & kQ3ViewerShowBadge);
- CheckItem(menu, cmdBadge, checked);
-
- checked = (viewerFlags & kQ3ViewerActive);
- CheckItem(menu, cmdViewer, checked);
-
- checked = (viewerFlags & kQ3ViewerControllerVisible);
- CheckItem(menu, cmdController, checked);
-
- checked = (viewerFlags & kQ3ViewerDraggingOff);
- CheckItem(menu, cmdDraggingOff, checked);
-
- checked = (viewerFlags & kQ3ViewerButtonCamera);
- CheckItem(menu, cmdBtnCamera, checked);
-
- checked = (viewerFlags & kQ3ViewerButtonTruck);
- CheckItem(menu, cmdBtnTruck, checked);
-
- checked = (viewerFlags & kQ3ViewerButtonOrbit);
- CheckItem(menu, cmdBtnOrbit, checked);
-
- checked = (viewerFlags & kQ3ViewerDrawFrame);
- CheckItem(menu, cmdFrame, checked);
-
- if ((viewerFlags & kQ3ViewerButtonZoom) > 0)
- CheckItem(menu, cmdBtnZoom, 1);
- else
- CheckItem(menu, cmdBtnZoom, 0);
-
- if ((viewerFlags & kQ3ViewerButtonDolly) > 0)
- CheckItem(menu, cmdBtnDolly, 1);
- else
- CheckItem(menu, cmdBtnDolly, 0);
-
- menu = GetMenuHandle(TEST_MENU);
- CheckItem(menu, cmdNormalMemory, true);
- }
- }
-
- /* EOF */
-